package 双指针或滑动窗口.大小为K且平均值1343;

public class Solution {
    /**
     * 计算满足条件的子数组数量
     * 该方法用于找出数组中所有长度为 k 且平均值大于等于 threshold 的子数组数量
     *
     * @param arr       输入的整数数组
     * @param k         子数组的长度
     * @param threshold 子数组平均值的阈值
     * @return 满足条件的子数组数量
     */
    public int numOfSubarrays(int[] arr, int k, int threshold) {
        // 数组长度
        int n = arr.length;
        // 用于累加当前子数组的元素和
        int sum = 0;
        // 满足条件的子数组数量
        int ans = 0;
        // 计算子数组元素和的阈值
        int tmp = k * threshold;

        // 遍历数组
        for (int i = 0; i < n; i++) {
            // 将当前元素加到子数组的元素和中
            sum += arr[i];

            // 如果当前索引小于 k-1，则继续累加元素，尚未形成长度为k的子数组
            if (i < k - 1) continue;

            // 如果当前子数组的元素和大于等于阈值，则满足条件
            if (sum >= tmp) {
                ans++;
            }

            // 从当前子数组的元素和中减去最旧的元素，为下一次迭代做准备
            sum -= arr[i - k + 1];
        }

        // 返回满足条件的子数组数量
        return ans;
    }

}
